﻿#ifndef __GRAPHICS_ENGINE_H__
#define __GRAPHICS_ENGINE_H__

/* Includes: */
#include "GraphOtherScenes.h"
#include "GraphGameScene.h"

USING_NS_CC;

/** Длительность анимации смены сцен. */
#define SCENE_TRANSITION_DURATION ( 1.2f )

/**
    \brief Класс движка работы с графиком.
 */
class GrEngine
{
public:
    GrEngine(){}
    ~GrEngine(){}
    
    /** \brief Функция получения сцены главного меню игры. */
    CCScene* getMainMenuScene();

    /** \brief Функция получения сцены заставки игры. */
    CCScene* getSplashScreenCCScene();
    
    /** \brief Функция получения сцены для окна отображения процесса загрузки игры. */
    GrSceneAbstract* getLoadingScreenScene();

    /** \brief Функция получения сцены для окна со списком рекордов игры. */
    GrSceneAbstract* getRecordsScreenScene();

    /** \brief Функция получения сцены для окна настроек игры. */
    GrSceneAbstract* getSettingsScreenScene();

    /** \brief Статический метод для создания анимации смены сцен. */
    CCScene* makeCCSceneTransaction( ccTime time, CCScene* scene );
    
    /** \brief Функция отображения главного меню игры. */
    void showMainMenu();

    /** \brief Функция отображения окна индикации процесса загрузки игры. */
    void showLoadingScreen();

    /** \brief Функция отображения окна со списком рекордов игры. */
    void showRecordsScreen();

    /** \brief Функция отображения окна настроек игры. */
    void showSettingsScreen();

    /** \brief Статический метод для создания игровой сцены. */
    void showGameScene();
};

/* Глобальная переменная объекта графической системы игры. */
extern GrEngine g_graphEngine;

/*
    Макросs работы с глобальным объектом графического движка. 
 */

/** Макрос для получения сцены главного меню. */
#define GE_GET_MAIN_MENU_SCENE       g_graphEngine.getMainMenuScene()
/** Макрос для олучения сцены заставки игры. */
#define GE_GET_SPLASH_SCREEN_SCENE   g_graphEngine.getSplashScreenCCScene()
/** Макрос для получения сцены окна о процессе загрузки игры. */
#define GE_GET_LOADING_SCREEN_SCENE  g_graphEngine.getLoadingScreenScene()
/** Макрос для получения сцены окна списка рекордов игры. */
#define GE_GET_RECORDS_SCREEN_SCENE  g_graphEngine.getRecordsScreenScene()
/** Макрос для получения сцены окна настроек игры. */
#define GE_GET_SETTINGS_SCREEN_SCENE g_graphEngine.getSettingsScreenScene()
/** Макрос для тображения главного меню. */
#define GE_SHOW_MAIN_MENU            g_graphEngine.showMainMenu()
/** Макрос для отображения окна со списком рекордов игры. */
#define GE_SHOW_RECORDS_SCREEN       g_graphEngine.showRecordsScreen()
/** Макрос для отображения окна настроек игры. */
#define GE_SHOW_SETTINGS_SCREEN      g_graphEngine.showSettingsScreen()
/** Макрос для отображение окна о процессе загрузки игры. */
#define GE_SHOW_LOADING_SCREEN       g_graphEngine.showLoadingScreen()
/** Макрос для отображения игровой сцены. */
#define GE_SHOW_GAME_SCENE           g_graphEngine.showGameScene()
/** Макрос для создания анимации при смене экранной сцены. */
#define GE_MAKE_SCENE_TRANSACTION( time, scene )   \
                g_graphEngine.makeCCSceneTransaction( time, scene )

#endif /* __GRAPHICS_ENGINE_H__ */
